local skynet = require "skynet"
local cluster = require "skynet.cluster"
require "skynet.manager"
 
skynet.start(function()
    --加载节点配置
    cluster.reload({
        node1 = "127.0.0.1:7001",
        node2 = "127.0.0.1:7002"
    })

    --获取定义在配置文件中的环境变量node
    local mynode = skynet.getenv("node")
    if mynode == "node1" then
        skynet.error("启动的是节点1")
        --启动节点, 告诉skynet进程自己是节点列表中的哪一项, 并开启监听
        cluster.open("node1")
        --启动两个ping服务, 并且给两个服务地址分别起别名为ping1、ping2
        skynet.name("ping1", skynet.newservice("ping"))
        skynet.name("ping2", skynet.newservice("ping"))
        --向两个服务send消息, "lua"-消息类型, start-对接的函数名, "node2"和"pong"是附带的参数
        skynet.send("ping1", "lua", "start", "node2", "pong")
        skynet.send("ping2", "lua", "start", "node2", "pong")

        --为node2节点上的pong服务在本节点中创建一个代理, 返回值等价于一个skynet服务地址
        local pong = cluster.proxy("node2", "pong")
        --可以在本节点内把这个地址当做正常的服务地址来使用
        skynet.send(pong, "lua", "pingback", "node1", "ping1", 1001)
    elseif mynode == "node2" then
        skynet.error("启动的是节点2")
        cluster.open("node2")
        skynet.name("pong", skynet.newservice("ping"))
    end
end)